#pragma once

namespace DYMath
{
	struct Vector3;

	struct Vector4
	{
		float x;
		float y;
		float z;
		float w;

		Vector4();
		Vector4(const Vector4& v);
		Vector4(float a, float b, float c, float d);

		float& operator[](int i);

		const float& operator[](int i) const;

		Vector4 operator-();

		Vector4& operator=(const Vector3& v);
	};

	Vector4 operator+(float scaler, const Vector4& v);

	Vector4 operator+(const Vector4& v, float scaler);

	Vector4 operator+(const Vector4& v1, const Vector4& v2);

	Vector4 operator-(float scaler, const Vector4& v);

	Vector4 operator-(const Vector4& v, float scaler);

	Vector4 operator-(const Vector4& v1, const Vector4& v2);

	Vector4 operator*(float scaler, const Vector4& v);

	Vector4 operator*(const Vector4& v, float scaler);

	Vector4 operator*(const Vector4& v1, const Vector4& v2);

	Vector4 operator/(float scaler, const Vector4& v);

	Vector4 operator/(const Vector4& v, float scaler);

	Vector4 operator/(const Vector4& v1, const Vector4& v2);
}